;---------------------------loader和kernel-------------
LOADER_BASE equ 0x900 ;加载到的地址
LOADER_START equ 0x2 ;从硬盘0x2块地址处开始加载
PAGE_DIR_TABLE_POS equ 0x00100000 ;页目录表pde开始地址0-11位都置0，12-31位为开始地址的高12-31位
KERNEL_START_SECTOR equ 0x9
KERNEL_BIN_BASE_ADDR equ 0x70000
KERNEL_ENTRY_POINT equ 0xc0001500

; gdt描述符属性
; 段描述符高23位，表示段界限的粒度为4KB
DESC_G_4K equ 1_00000000000000000000000b   

; D/B为，1表示运行在32位模式下
DESC_D_32 equ 1_0000000000000000000000b
; 高21位，如果为1表示为64位代码段，目前我们都是在32位模式下操作，故为零
DESC_L equ     0_000000000000000000000b
; 没有明确的用途，取值随意
DESC_AVL equ   0_00000000000000000000b
; 第二部分段界限值，由于采用了32位平坦模型，所以段界限为(4GB / 4KB) - 1 = 0xFFFFF，故为全1
DESC_LIMIT_CODE2 equ 1111_0000000000000000b ;段长度高4位
DESC_LIMIT_DATA2 equ DESC_LIMIT_CODE2 ;
DESC_LIMIT_VIDEO2 equ 0000_0000000000000000b ;


DESC_P equ 1_000000000000000b
DESC_DPL_0 equ 00_0000000000000b
DESC_DPL_1 equ 01_0000000000000b
DESC_DPL_2 equ 10_0000000000000b
DESC_DPL_3 equ 11_0000000000000b
DESC_S_CODE equ  1_000000000000b
DESC_S_DATA equ  DESC_S_CODE
DESC_S_sys equ  0_000000000000b
DESC_TYPE_CODE equ 1000_00000000b
DESC_TYPE_DATA equ 0010_00000000b

; 代码段描述符的高32位表示
DESC_CODE_HIGH4 equ 0x00000000 + DESC_G_4K + DESC_D_32 + \
    DESC_L + DESC_AVL + DESC_LIMIT_CODE2 + \
    DESC_P + DESC_DPL_0 + DESC_S_CODE + DESC_TYPE_CODE + 0x00

DESC_DATA_HIGH4 equ 0x00000000 + DESC_G_4K + DESC_D_32 + \
    DESC_L + DESC_AVL + DESC_LIMIT_DATA2 + \
    DESC_P + DESC_DPL_0 + DESC_S_DATA + DESC_TYPE_DATA + 0x00

DESC_VIDEO_HIGH4 equ 0x00000000 + DESC_G_4K + DESC_D_32 + \
    DESC_L + DESC_AVL + DESC_LIMIT_VIDEO2 + \
    DESC_P + DESC_DPL_0 + DESC_S_DATA + DESC_TYPE_DATA + 0x0b
    ;显存段基址位 0x0b 8000 所以中八位为0x0b

; 选择字属性
RPL0 equ 00b
RPL1 equ 01b
RPL2 equ 10b
RPL3 equ 11b
TI_GDT equ 0_00b
TI_LDT equ 1_00b

; 页表相关属性
PG_P equ 1b ; 存在物理页中
PG_RW_R equ 00b ; 可读不可写
PG_RW_RW equ 10b ; 可读可写
PG_US_S equ 000b ; 超级用户
PG_US_U equ 100b ; 普通用户

PT_NULL equ 0
